import { createSSRApp } from 'vue'
import App from './App.vue'
// 导入 polyfill 处理兼容性问题
// import './utils/polyfill.js'
import globalComponents from './components/index.js'
import { userStorage } from '@/utils/storage'
import { userInfoMixin } from '@/utils/userInfo'
import router from '@/utils/router'



// AbortController polyfill for WeChat Mini Program
if (typeof globalThis.AbortController === 'undefined') {
  class AbortController {
    constructor() {
      this.signal = {
        aborted: false,
        addEventListener: () => {},
        removeEventListener: () => {},
        dispatchEvent: () => {}
      }
    }
    
    abort() {
      this.signal.aborted = true
    }
  }
  
  globalThis.AbortController = AbortController
}

export function createApp() {
  const app = createSSRApp(App)
  
  // 注册全局组件
  app.use(globalComponents)
  
  // 注册全局路由方法
  app.config.globalProperties.$router = router
  app.config.globalProperties.$navigateTo = router.navigateTo
  app.config.globalProperties.$redirectTo = router.redirectTo
  app.config.globalProperties.$switchTab = router.switchTab
  app.config.globalProperties.$reLaunch = router.reLaunch
  app.config.globalProperties.$navigateBack = router.navigateBack

  // 需要登录提示的受限页面（进入这些页面时未登录则弹窗提示）
  const guardRoutes = new Set([
    '/pages/notice/index',
    '/pages/users/index',
    '/pages/tasks/index'
  ])

  // 获取当前页面路径（兼容多端）
  function getCurrentPath() {
    try {
      const pages = getCurrentPages?.() || []
      const page = pages[pages.length - 1] || {}
      const route = page.route || page?.$page?.route || (page?.$page?.fullPath ? page.$page.fullPath.split('?')[0] : '')
      if (!route) return ''
      return route.startsWith('/') ? route : `/${route}`
    } catch (e) {
      return ''
    }
  }

  // 全局登录过期检查方法
  app.config.globalProperties.$checkLoginExpired = function(response) {
    if (response && response.code === 0 && response.data === -1) {
      uni.showModal({
        title: '⚠️ 登录已过期',
        content: '您的登录状态已过期，请重新登录以继续使用。',
        confirmText: '立即登录',
        cancelText: '稍后再说',
        confirmColor: '#FF5151',
        cancelColor: '#999999',
        showCancel: true,
        success: (res) => {
          if (res.confirm) {
            // 清除本地登录状态
            userStorage.clearUserInfo()
            // 跳转到登录页
            uni.reLaunch({ url: '/pages/login/login' })
          } else {
            // 用户取消登录，跳转到首页
            uni.reLaunch({
              url: '/pages/index/index'
            });
          }
        }
      })
      return true // 表示已处理登录过期
    }
    return false // 表示未处理
  }

  // 全局认证引导方法
  app.config.globalProperties.$showVerificationGuide = function() {
    uni.showModal({
      title: '提示',
      content: '任务大厅功能需要实名认证，请先完成实名认证！',
      confirmText: '去认证',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          uni.navigateTo({
            url: '/pages/realname/index'
          });
        } else {
          // 用户取消认证，跳转到首页
        }
      }
    });
  }

  // 全局用户信息管理混入
  app.mixin(userInfoMixin)
  
  // 全局登录提示：进入受限页面时，如果未登录则弹窗提示登录
  app.mixin({
    onShow() {
      try {
        const path = getCurrentPath()
        if (guardRoutes.has(path) && !userStorage.isLoggedIn()) {
          uni.showModal({
            title: '✨ 登录享特权',
            content: '🎉 登录后解锁专属功能：\n• 个人订单管理\n• 余额查询与充值\n• 专属会员优惠\n• 个性化推荐服务\n\n立即登录，开启精彩体验！',
            confirmText: '🚀 立即登录',
            cancelText: '💭 稍后再说',
            confirmColor: '#FF5151',
            cancelColor: '#999999',
            editable: false,
            showCancel: true,
            success: (res) => {
              if (res.confirm) {
                // 去登录页
                uni.navigateTo({ url: '/pages/login/login' })
              } else {
                // 用户取消登录，跳转到首页
                uni.reLaunch({
                  url: '/pages/index/index'
                });
              }
            }
          })
        }
      } catch (e) {
        // 忽略异常，避免影响页面生命周期
      }
    }
  })
  
  return {
    app,
  }
}
